#include<stdio.h>
#include<stdlib.h>
#define Size 5 //顺序表元素空间大小
// 定义表结构
typedef struct Table{
    /* data */
    int *head; //基地址
    int length; //表长
    int size; //表中每个元素存储空间的大小
}table;

// 初始化
table initTable(){
    table t;
    // 构造一个空的循序表，动态申请存储空间
    t.head=(int*)malloc(Size*sizeof(int));
    // 如果基地址申请失败，则做出提示并退出程序
    if (!t.head)
    {
        /* code */
        printf("申请地址失败\n");
        exit(0);
    }
    // 空表的长度初始化为0
    t.length=0;
    // 空表的初始存储空间为Size
    t.size=Size;
    printf("顺序表申请成功\n");
    return t;
}

// 遍历顺序表
void displayTable(table t){
    for(int i=0;i<t.length;i++){
        printf("%d\n",t.head[i]);
    }
    printf("\n");
}


// 求表长
int length(table t){
    return t.length;
}

// 插入 在位置i插入元素x
table insert(table t,int i,char x){
    if((i<0)||(i>t.length+1))
        printf("插入的位置非法");
    else
    {
        for(int j=t.length-1;j>=i+1;j--)
            t.head[j+1] = t.head[j];
        t.head[i-1] = x;
        t.length++;
    }
    return t;
}
// 删除 删除位置i上的元素
table delete(table t,int i){
    if((i<0)||(i>t.length)){
        printf("非法删除\n");
    }
    else
    {
        for(int j=i;j<t.length;j++){
            t.head[j]=t.head[j+1];
        }
        t.length--;
    }
    return t;
}
// 定位 在表t中找到元素x并返回线性表中的位置，否则返回０
int locate(table t,int x){
    for(int i=0;i<=t.length;i++){
        if(t.head[i]==x){
            return i+1;
        }
    }
    return 0;
}
void main(){
    table t = initTable();
    for(int i=0;i<5;i++){
        t = insert(t,t.length,(char)i);
    }
    // t=delete(t,2);
    displayTable(t);
    printf("表长为%d\n",length(t));
    printf("3的位置为：%d\n",locate(t,3));
}